package easy

import (
	. "GoLeetcode/common"
)

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

func findSecondMinimumValue(root *TreeNode) int {
	ans := -1
	minVal := root.Val
	var dfs func(*TreeNode)
	dfs = func(node *TreeNode) {
		// ans != -1 && node.Val >= ans, 表示ans存储了一个>=minVal的值,且将node.Val>=ans的情况全部排除
		// 也就是说,会运行到 if node.Val > minVal {} 这一步的node.Val,应该是 < ans 的, 当node.Val > minVal时
		// ans也就取到了值比自己小的值(node.Val)
		if node == nil || (ans != -1 && node.Val >= ans) {
			return
		}
		if node.Val > minVal {
			ans = node.Val
		}
		// 如果出现 out of memory错误,大概率是这里写成了root.Left和root.Right
		dfs(node.Left)
		dfs(node.Right)
	}

	dfs(root)
	return ans
}
